# This will set up our new segment registers. We need to do
# something special in order to set CS. We do what is called a
# far jump. A jump that includes a segment as well as an offset.
# This is declared in C as 'extern void set_gdt()#'
.global set_gdt     # Allows the C code to link to this
.extern gdt_desc            # Says that '_gdt_desc' is in another file
.extern msg
set_gdt:
	lgdt gdt_desc        # Load the GDT with our 'gdt_desc' which is a special pointer
	mov $0x10, %ax      # 0x10 is the offset in the GDT to our data segment
	mov %ax, %ds
	mov %ax, %es
	mov %ax, %fs
	mov %ax, %gs
	mov %ax, %ss
	ljmp $0x08,$flush2   # 0x08 is the offset to our code segment: Far jump!

flush2:
	ret               # Returns back to the C code!

